package com.young4j.xinsuiwutuobang.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 数据类型转化类
 * 这个类的必要性是对转换对象进行判断，
 * 在转换的过程中如果将null进行转化
 * 则会出现异常
 * @author 杨飞
 *
 */
public class Custutils {
	private static final Logger LOGGER = LoggerFactory.getLogger(Custutils.class);
	/**
	 * 转为String型
	 * String.valueOf可以将任何类型转换为String，不同于基本类型对应的包装类型，
	 * 经典的单条条件结果if  else语句 被三目表达式代替实例
	 * @param obj
	 * @return
	 */
	public static String parseString(Object obj){
		return Custutils.parseString(obj,"");
	}
	
	public static String parseString(Object obj,String defaultValue){
		return obj != null ? String.valueOf(obj) : defaultValue;
	}
	public static double parseDouble(Object obj){
		return parseDouble(obj,0);
	}
	/**
	 * 转换为double
	 * 先将传入的Object转换为String，String不为Bluck则
	 * 转换为long，这里可能不是long形式的String所以要捕获异常。
	 * 有异常则赋默认值，无异常则更改变量的值
	 * @param obj
	 * @param defaultValue
	 * @return
	 */
	public static double parseDouble(Object obj,double defaultValue){
		double value = defaultValue;
		if(obj != null){
			String strValue = parseString(obj);
			if(StringUtils.isNotBlank(strValue)){
				try {
					value = Double.parseDouble(strValue);
				} catch (NumberFormatException e) {
					value = defaultValue;
					LOGGER.error("parse double is  failure",e);
				}
			}
		}
		return value;
	}
	public static long parseLong(Object obj){
		return parseLong(obj,0);
	}
	public static long parseLong(Object obj,long defaultValue){
		long value = defaultValue;
		if(obj != null){
			String strValue = parseString(obj);
			if(StringUtils.isNotBlank(strValue)){
				try {
					value = Long.parseLong(strValue);
				} catch (NumberFormatException e) {
					value = defaultValue;
					LOGGER.error("parse long is failure",e);
				}
			}
		}
		return value;
	}
	public static int parseInt(Object obj){
		return parseInt(obj,0);
	}
	public static int parseInt(Object obj,int defaultValue){
		int value = defaultValue;
		if(obj != null){
			String strValue = parseString(obj);
			if(StringUtils.isNotBlank(strValue)){
				try {
					value = Integer.parseInt(strValue);		
				} catch (NumberFormatException e) {
					value = defaultValue;
					LOGGER.error("parse int is failure",e);
				}
			}
		}
		return value;
	}
	public static boolean parseBoolean(Object obj){
		return parseBoolean(obj,false);
	}
	/**
	 * 转为boolean型
	 * Boolean.parseBoolean不用判空，内部已经判断
	 * return ((s != null) && s.equalsIgnoreCase("true"));
	 * @param obj
	 * @param defaultValue
	 * @return
	 */
	public static boolean parseBoolean(Object obj,boolean defaultValue){
		boolean value = defaultValue;
		if(obj != null){
			value = Boolean.parseBoolean(parseString(obj));
		}
		return value;
	}
}
